
//---------------------
// 超声波雷达针脚定义
//---------------------

//控制端
int TrigPin = A4;
//接受端针脚
int EchoPin = A5;
//距离
float distance; 

//---------------------
// 蜂鸣器针脚定义
//---------------------

int buzzer=5;
//蜂鸣器声音延迟时间
int repeat=0;


//---------------------
// 8x8LED定义
//---------------------
//LED显示行数
int input=0;
//详情参看PPT
int R[] = {13, 3, 4, 10,   6, 11, 15, 16}; //行 13, 3, 4, 10,    6, 11, 15, 16 低电位
int C[] = {9, 14, 8, 12, A3, 7, 2};   //列 9, 14, 8, 12, 1, 7, 2, 5  高电位


//初始化设置
void setup() { 
  // 初始化串口通信及连接SR04的引脚
  Serial.begin(9600); 
  Serial.println("Initialize ..."); 
  
  //设置数字IO脚模式，OUTPUT为输出 
  pinMode(buzzer,OUTPUT);
  pinMode(TrigPin, OUTPUT); 
  //要检测引脚上输入的脉冲宽度，需要先设置为输入状态 
  pinMode(EchoPin, INPUT);

  //循环定义行列PIN 为输出模式
  for(int i = 0;i<8;i++)
  {
    pinMode(R[i],OUTPUT);
    pinMode(C[i],OUTPUT);
    Serial.println(R[i]); 
    digitalWrite(R[i], LOW);
  }

  Serial.println("Runing ..."); 
}

// 声音
void sound(float dist){
     
    if(dist>0){
       
      tone(buzzer,900);
      delay(repeat);
      noTone(buzzer);   
     }
    
}

//8x8显示
void led(int input){
    for(int q=0;q<7;q++){
       digitalWrite(C[q], HIGH);
       if(q>=input){
         digitalWrite(C[q],LOW);
        }
    }
}

//主程序
void loop() { 
 
    // 产生一个10us的高脉冲去触发TrigPin
    digitalWrite(TrigPin, LOW); 
    delayMicroseconds(2); 
    digitalWrite(TrigPin, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(TrigPin, LOW); 

    
    // 检测脉冲宽度 
    distance = pulseIn(EchoPin, HIGH) ; 
    Serial.print(distance);  
    Serial.println();

    //距离监听
    if(distance > 300 && distance < 600){   
      repeat=100;
      input=6;
    }else if(distance >600 && distance < 1000){
      repeat=150; 
      input=4;
    }else if(distance >1000 && distance < 2000){  
      repeat=380;
      input=2;
    }else if(distance >0 && distance<300){
      repeat=50;
      input=7;
    }else{
      //安全距离
      input=1;
      repeat=0;  
    }
    
    //根据距离不同提示音不同
    led(input);
    sound(repeat);
    delay(150);
   
} 
